1 EDA

We can first visualize the data after dimension reduction with zinbWave. We then use t-SNE and color the cells with the allen labels. Since we use various values for the k parameter, we plot two representations with the most extreme values of k.

2 General comments

We have the following workflow

In the Seurat clustering, there are two parameters to choose from: the resolution and the k.param (use in a knn step). From the seurat help file, for the resolution parameter: use a value above (below) 1.0 if you want to obtain a larger (smaller) number of communities.

We picked a value of 1.6 as we want many clusters to start with. We also pick k = 50. Those values seem intermediate in term of ARI with other pairs of paramters (see section Seurat ARI param)

We also consider two ways of computing the ARI between RSEC and other methods. Either, we force RSEC to assign all cells to a given cluster, or we only compute the ARI between RSEC and the other methods on those cells that RSEC do cluster. Note that in the second case, other pairs of methods are compared using all cells. We denote as RsecT the cluster assignement where all cells are assigned (i.e Rsec Total).

The ARI merging method works as follow. We iterate over all pairs of clusters for every clustering method. For each pair, we try to merge the two clusters and see how it improves the ARI with the other methods. We then merge the pair that improves the ARI the most. We stop when the ARI cannot be improved anymore.

In the general case, we perform the ARI merging without the allen labels and we then use it as a comparison. A quick overview of how the algorithm performs with the allen labels is seen at the end.

3 Reduction in the number of clusters

4 Improvement in ARI

5 Comparison with Allen subclass

5.1 After ARI merging

5.2 After a last consensus step

5.3 Stopping during the merging

6 Seurat ARI Param

LS0tCmF1dGhvcjogIkhlY3RvciBSb3V4IGRlIELDqXppZXV4IgpkYXRlOiAnYHIgZm9ybWF0KFN5cy50aW1lKCksICIlZCAlQiAsICVZIilgJwpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAyCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIApwYXJhbXM6CiAgZGF0YXNldDogIlNNQVJUZXJfbnVjbGVpX01PcCIKICB0aXRsZTogIkFuYWx5c2lzIG9mIHRoZSBTTUFSVGVyX251Y2xlaV9NT3AgZGF0YXNldCIKLS0tCi0tLQp0aXRsZTogYHIgcGFyYW1zJHRpdGxlYAotLS0KCmBgYHtyIGxvYWQgcGFja2FnZXMsIGluY2x1ZGU9Rn0KbGlicmFyeShrbml0cikKb3B0c19jaHVuayRzZXQoCiAgZmlnLnBvcyA9ICIhaCIsIG91dC5leHRyYSA9ICIiLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYsCiAgZmlnLndpZHRoID0gNSwgZmlnLmFsaWduID0gImNlbnRlciIsIGVjaG8gPSBGCikKbGlicyA8LSBjKCJoZXJlIiwgImRwbHlyIiwgImdncGxvdDIiLCAidGlkeXIiLCAic3RyaW5nciIsICJyZWFkciIsICJjb3dwbG90IiwKICAgICAgICAgICJjbHVzdGVyRXhwZXJpbWVudCIsICJtY2x1c3QiLCAiUkNvbG9yQnJld2VyIiwgInByb2dyZXNzIiwgIkR1bmUiLAogICAgICAgICAgInBuZyIsICJwdXJyciIpCnN1cHByZXNzTWVzc2FnZXMoCiAgc3VwcHJlc3NXYXJuaW5ncyhzYXBwbHkobGlicywgcmVxdWlyZSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkKKQpybShsaWJzKQp0eXBlIDwtIGZ1bmN0aW9uKGRhdGFzZXQpIHsKICBpZiAoc3RyX2RldGVjdChkYXRhc2V0LCAiU01BUlQiKSkgcmV0dXJuKCJTbWFydC1TZXEiKQogIGlmIChzdHJfZGV0ZWN0KGRhdGFzZXQsICIxMHgiKSkgcmV0dXJuKCIxMFgiKQogIGlmIChzdHJfZGV0ZWN0KGRhdGFzZXQsICJSZWdldiIpKSByZXR1cm4oIlJlZ2V2IikKfQp0eXBlIDwtIHR5cGUocGFyYW1zJGRhdGFzZXQpCm1lcmdlcnMgPC0gcmVhZFJEUyhoZXJlKCJkYXRhIiwgIkR1bmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAocGFyYW1zJGRhdGFzZXQsICJfbWVyZ2Vycy5yZHMiKSkpCmBgYAoKIyBFREEKCldlIGNhbiBmaXJzdCB2aXN1YWxpemUgdGhlIGRhdGEgYWZ0ZXIgZGltZW5zaW9uIHJlZHVjdGlvbiB3aXRoIHppbmJXYXZlLiBXZSB0aGVuIHVzZSB0LVNORSBhbmQgY29sb3IgdGhlIGNlbGxzIHdpdGggdGhlIGFsbGVuIGxhYmVscy4gU2luY2Ugd2UgdXNlIHZhcmlvdXMgdmFsdWVzIGZvciB0aGUgayBwYXJhbWV0ZXIsIHdlIHBsb3QgdHdvIHJlcHJlc2VudGF0aW9ucyB3aXRoIHRoZSBtb3N0IGV4dHJlbWUgdmFsdWVzIG9mIGsuCgpgYGB7ciB0LVNORSBwbG90cywgZmlnLndpZHRoPTE4LCBmaWcuaGVpZ2h0PTl9CnBsb3RzIDwtIGxpc3QuZmlsZXMoaGVyZSgiRmlndXJlcyIsICJFREEiKSkKcGxvdHMgPC0gcGxvdHNbc3RyX2RldGVjdChwbG90cywgcGFyYW1zJGRhdGFzZXQpXQpwbG90cyA8LSBwbG90c1tzdHJfZGV0ZWN0KHBsb3RzLCAicG5nIildCnBsb3QubmV3KCkKcGxvdC53aW5kb3coMDoxLCAwOjEpCnJhc3RlckltYWdlKHJlYWRQTkcoaGVyZSgiRmlndXJlcyIsICJFREEiLCBwbG90c1sxXSkpLCAwLCAwLCAuNSwgMSkKcmFzdGVySW1hZ2UocmVhZFBORyhoZXJlKCJGaWd1cmVzIiwgIkVEQSIsIHBsb3RzW2xlbmd0aChwbG90cyldKSksIDAuNSwgMCwgMSwgMSkKYGBgCgoKIyBHZW5lcmFsIGNvbW1lbnRzCgpXZSBoYXZlIHRoZSBmb2xsb3dpbmcgd29ya2Zsb3cKCmBgYHtyIHdvcmtmbG93LCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KcGxvdC5uZXcoKQpwbG90LndpbmRvdygwOjEsIDA6MSkKcmFzdGVySW1hZ2UocmVhZFBORyhoZXJlKCJFeHBsYWluYXRpb25zIiwgIldvcmtmbG93LnBuZyIpKSwgMCwgMCwgMSwgMSkKYGBgCgpJbiB0aGUgU2V1cmF0IGNsdXN0ZXJpbmcsIHRoZXJlIGFyZSB0d28gcGFyYW1ldGVycyB0byBjaG9vc2UgZnJvbTogdGhlIHJlc29sdXRpb24gYW5kIHRoZSBrLnBhcmFtICh1c2UgaW4gYSBrbm4gc3RlcCkuIEZyb20gdGhlIHNldXJhdCBoZWxwIGZpbGUsIGZvciB0aGUgcmVzb2x1dGlvbiBwYXJhbWV0ZXI6IHVzZSBhIHZhbHVlIGFib3ZlIChiZWxvdykgMS4wIGlmIHlvdSB3YW50IHRvIG9idGFpbiBhIGxhcmdlciAoc21hbGxlcikgbnVtYmVyIG9mIGNvbW11bml0aWVzLgoKV2UgcGlja2VkIGEgdmFsdWUgb2YgMS42IGFzIHdlIHdhbnQgbWFueSBjbHVzdGVycyB0byBzdGFydCB3aXRoLiBXZSBhbHNvIHBpY2sgayA9IDUwLiBUaG9zZSB2YWx1ZXMgc2VlbSBpbnRlcm1lZGlhdGUgaW4gdGVybSBvZiBBUkkgd2l0aCBvdGhlciBwYWlycyBvZiBwYXJhbXRlcnMgKHNlZSBzZWN0aW9uIFNldXJhdCBBUkkgcGFyYW0pCgpXZSBhbHNvIGNvbnNpZGVyIHR3byB3YXlzIG9mIGNvbXB1dGluZyB0aGUgQVJJIGJldHdlZW4gUlNFQyBhbmQgb3RoZXIgbWV0aG9kcy4gRWl0aGVyLCB3ZSBmb3JjZSBSU0VDIHRvIGFzc2lnbiBhbGwgY2VsbHMgdG8gYSBnaXZlbiBjbHVzdGVyLCBvciB3ZSBvbmx5IGNvbXB1dGUgdGhlIEFSSSBiZXR3ZWVuIFJTRUMgYW5kIHRoZSBvdGhlciBtZXRob2RzIG9uIHRob3NlIGNlbGxzIHRoYXQgUlNFQyBkbyBjbHVzdGVyLiBOb3RlIHRoYXQgaW4gdGhlIHNlY29uZCBjYXNlLCBvdGhlciBwYWlycyBvZiBtZXRob2RzIGFyZSBjb21wYXJlZCB1c2luZyBhbGwgY2VsbHMuIFdlIGRlbm90ZSBhcyBSc2VjVCB0aGUgY2x1c3RlciBhc3NpZ25lbWVudCB3aGVyZSBhbGwgY2VsbHMgYXJlIGFzc2lnbmVkIChpLmUgUnNlYyBUb3RhbCkuIAoKVGhlIEFSSSBtZXJnaW5nIG1ldGhvZCB3b3JrcyBhcyBmb2xsb3cuIFdlIGl0ZXJhdGUgb3ZlciBhbGwgcGFpcnMgb2YgY2x1c3RlcnMgZm9yIGV2ZXJ5IGNsdXN0ZXJpbmcgbWV0aG9kLiBGb3IgZWFjaCBwYWlyLCB3ZSB0cnkgdG8gbWVyZ2UgdGhlIHR3byBjbHVzdGVycyBhbmQgc2VlIGhvdyBpdCBpbXByb3ZlcyB0aGUgQVJJIHdpdGggdGhlIG90aGVyIG1ldGhvZHMuIFdlIHRoZW4gbWVyZ2UgdGhlIHBhaXIgdGhhdCBpbXByb3ZlcyB0aGUgQVJJIHRoZSBtb3N0LiBXZSBzdG9wIHdoZW4gdGhlIEFSSSBjYW5ub3QgYmUgaW1wcm92ZWQgYW55bW9yZS4KCkluIHRoZSBnZW5lcmFsIGNhc2UsIHdlIHBlcmZvcm0gdGhlIEFSSSBtZXJnaW5nIHdpdGhvdXQgdGhlIGFsbGVuIGxhYmVscyBhbmQgd2UgdGhlbiB1c2UgaXQgYXMgYSBjb21wYXJpc29uLiBBIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyB0aGUgYWxnb3JpdGhtIHBlcmZvcm1zIHdpdGggdGhlIGFsbGVuIGxhYmVscyBpcyBzZWVuIGF0IHRoZSBlbmQuCgojIFJlZHVjdGlvbiBpbiB0aGUgbnVtYmVyIG9mIGNsdXN0ZXJzCgpgYGB7ciBJbXAgbm8gYWxsZW59CnBsb3RQcmVQb3N0KG1lcmdlcnMpCmBgYAoKIyBJbXByb3ZlbWVudCBpbiBBUkkKCmBgYHtyIEFSSSBpbXAgbm8gYWxsZW4gY2VsbH0KcGxvdF9ncmlkKAogIHBsb3RBUklzKG1lcmdlcnMkaW5pdGlhbE1hdCkgKyBnZ3RpdGxlKCJCZWZvcmUgbWVyZ2luZyIpLAogIHBsb3RBUklzKG1lcmdlcnMkY3VycmVudE1hdCkgKyBnZ3RpdGxlKCJBZnRlciBtZXJnaW5nIikKKQpgYGAKCgpgYGB7ciBBUkkgdHJlbmQsIGZpZy53aWR0aD05fQpBUkl0cmVuZChtZXJnZXIgPSBtZXJnZXJzKQpgYGAKCiMgQ29tcGFyaXNvbiB3aXRoIEFsbGVuIHN1YmNsYXNzCgojIyBBZnRlciBBUkkgbWVyZ2luZwoKYGBge3IgY29tcCBjZWxsfQppZiAoIXN0cl9kZXRlY3QocGFyYW1zJGRhdGFzZXQsICJSZWdldiIpKSB7CiAgYWxsZW5fY2x1c3RlcnMgPC0gcmVhZC5jc3YoaGVyZSgiZGF0YSIsIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAocGFyYW1zJGRhdGFzZXQsICJfY2x1c3Rlci5tZW1iZXJzaGlwLmNzdiIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCJjZWxscyIsICJjbHVzdGVyX2lkIikpCiAgY2x1c3RlcnMgPC0gcmVhZC5jc3YoaGVyZSgiZGF0YSIsIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAocGFyYW1zJGRhdGFzZXQsICJfY2x1c3Rlci5hbm5vdGF0aW9uLmNzdiIpKSwKICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBUKQogIGFsbGVuX2NsdXN0ZXJzIDwtIGZ1bGxfam9pbihhbGxlbl9jbHVzdGVycywgY2x1c3RlcnMpICU+JQogICAgYXJyYW5nZShjZWxscykKICBybShjbHVzdGVycykKICAKICBmaW5hbCA8LSBtYXBfZGYobWVyZ2VycyRjdXJyZW50TWF0W29yZGVyKHJvd25hbWVzKG1lcmdlcnMkaW5pdGlhbE1hdCkpLF0sCiAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmFuZEluZGV4LCB5ID0gYWxsZW5fY2x1c3RlcnMkc3ViY2xhc3NfbGFiZWwpICU+JQogICAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSwgbmFtZXNfdG8gPSAiY2x1c19tZXRob2QiLCB2YWx1ZXNfdG8gPSAiQVJJIikKICBpbml0aWFsIDwtIG1hcF9kZihtZXJnZXJzJGluaXRpYWxNYXRbb3JkZXIocm93bmFtZXMobWVyZ2VycyRpbml0aWFsTWF0KSksXSwKICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFJhbmRJbmRleCwgeSA9IGFsbGVuX2NsdXN0ZXJzJHN1YmNsYXNzX2xhYmVsKSAlPiUKICAgIHBpdm90X2xvbmdlcihldmVyeXRoaW5nKCksIG5hbWVzX3RvID0gImNsdXNfbWV0aG9kIiwgdmFsdWVzX3RvID0gIkFSSSIpCiAgCiAgTW9ub2NsZSA8LSByZWFkLmNzdihoZXJlKCJkYXRhIiwgIlNpbmdsZU1ldGhvZCIsIHBhc3RlMChwYXJhbXMkZGF0YXNldCwgIl9Nb25vY2xlLmNzdiIpKSkgJT4lCiAgICBzZWxlY3QoLVgpCiAgY29sbmFtZXMoTW9ub2NsZSkgPC0gcGFzdGUwKCJNb25vY2xlXyIsIHN0cl9yZW1vdmUoY29sbmFtZXMoTW9ub2NsZSksICJea18iKSkKICBjb2xuYW1lcyhNb25vY2xlKVtuY29sKE1vbm9jbGUpXSA8LSAiY2VsbHMiCiAgc2MzIDwtIHJlYWQuY3N2KGhlcmUoImRhdGEiLCAiU2luZ2xlTWV0aG9kIiwgcGFzdGUwKHBhcmFtcyRkYXRhc2V0LCAiX1NDMy5jc3YiKSkpICU+JQogICAgc2VsZWN0KC1YKQogIGNvbG5hbWVzKHNjMykgPC0gcGFzdGUwKCJzYzNfIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVtb3ZlKGNvbG5hbWVzKHNjMyksICJYIikgJT4lIHN0cl9yZXBsYWNlKCJcXC4iLCAiLSIpKQogIGNvbG5hbWVzKHNjMylbbmNvbChzYzMpXSA8LSAiY2VsbHMiCiAgU2V1cmF0IDwtIHJlYWQuY3N2KGhlcmUoImRhdGEiLCAiU2luZ2xlTWV0aG9kIiwgcGFzdGUwKHBhcmFtcyRkYXRhc2V0LCAiX1NldXJhdC5jc3YiKSkpICU+JQogICAgc2VsZWN0KC1YKQogIGNvbG5hbWVzKFNldXJhdCkgPC0gcGFzdGUwKCJTZXVyYXRfIiwgc3RyX3JlbW92ZShjb2xuYW1lcyhTZXVyYXQpLCAiXlgiKSkKICBjb2xuYW1lcyhTZXVyYXQpW25jb2woU2V1cmF0KV0gPC0gImNlbGxzIgogIAogIHNpbmdsZXMgPC0gZnVsbF9qb2luKHNjMywgU2V1cmF0KSAlPiUgZnVsbF9qb2luKE1vbm9jbGUpICU+JQogICAgYXJyYW5nZShjZWxscykgJT4lIHNlbGVjdCgtY2VsbHMpICU+JSBhcy5saXN0KCkgJT4lCiAgICBtYXBfZGYoLiwgYWRqdXN0ZWRSYW5kSW5kZXgsIHkgPSBhbGxlbl9jbHVzdGVycyRzdWJjbGFzc19sYWJlbCkgJT4lCiAgICBwaXZvdF9sb25nZXIoZXZlcnl0aGluZygpLCBuYW1lc190byA9ICJtZXRob2QiLCB2YWx1ZXNfdG8gPSAiQVJJIikgJT4lCiAgICBkcGx5cjo6bXV0YXRlKGNsdXNfbWV0aG9kID0gd29yZChtZXRob2QsIDEsIHNlcCA9ICJfIiksCiAgICAgICAgICAgICAgICAgIGxldmVsID0gd29yZChtZXRob2QsIDIsIHNlcCA9ICJfIikpCiAgZ2dwbG90KHNpbmdsZXMsIGFlcyh4ID0gY2x1c19tZXRob2QsIHkgPSBBUkkpKSArCiAgICBnZW9tX3Zpb2xpbigpICsKICAgIHRoZW1lX2NsYXNzaWMoKSArCiAgICBnZW9tX2ppdHRlcih3aWR0aCA9IC4wMSwKICAgICAgZGF0YSA9IGJpbmRfcm93cygiRmluYWwiID0gZmluYWwsICJJbml0aWFsIiA9IGluaXRpYWwsIC5pZCA9ICJzdGVwIiksCiAgICAgIGFlcyhjb2wgPSBzdGVwKSkgKwogICAgc2NhbGVfY29sb3JfYnJld2VyKHR5cGUgPSAicXVhbCIpICsKICAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKG1pbihpbml0aWFsJEFSSSwgZmluYWwkQVJJLCBzaW5nbGVzJEFSSSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoaW5pdGlhbCRBUkksIGZpbmFsJEFSSSwgc2luZ2xlcyRBUkkpKSkKfQpgYGAKCiMjIEFmdGVyIGEgbGFzdCBjb25zZW5zdXMgc3RlcAoKYGBge3IgZmluYWwgY29uc2Vuc3VzfQpjbHVzdGVycyA8LSBtZXJnZXJzJGN1cnJlbnRNYXQKciA8LSB3aGljaChjb2xuYW1lcyhjbHVzdGVycykgPT0gIlJzZWNUIikKaWYgKGFsbC5lcXVhbChpbnRlZ2VyKDApICxyKSAhPSBUUlVFKSB7CiAgY2x1c3RlcnNbLCJSc2VjIl0gPC0gYXNzaWduUnNlYyhtZXJnZXJzKSAKfQpjbHVzdGVycyA8LSBhcy5tYXRyaXgoY2x1c3RlcnMpIAoKY2VsbHNDb25zZW5zdXMgPC0gQ29uc2Vuc3VzKGNsdXNNYXQgPSBjbHVzdGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlID0gKHR5cGUgIT0gIlNtYXJ0LVNlcSIpKQppZiAodHlwZSA9PSAiUmVnZXYiKSB7CiAgY29uc2Vuc3VzIDwtIGNiaW5kKGNlbGxzQ29uc2Vuc3VzLAogICAgICAgICAgICAgICAgICAgICBjbHVzdGVycykKfSBlbHNlIHsKICBjb25zZW5zdXMgPC0gY2JpbmQoY2VsbHNDb25zZW5zdXMsCiAgICAgICAgICAgICAgICAgICAgIGFsbGVuX2NsdXN0ZXJzJHN1YmNsYXNzX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICBjbHVzdGVycykKICBjb2xuYW1lcyhjb25zZW5zdXMpW2MoMSwgMildIDwtIGMoIkNvbnNlbnN1cyIsICJBbGxlblxuc3ViY2xhc3MiKQp9CnBsb3RDbHVzdGVycyhvYmplY3QgPSBjb25zZW5zdXMpCnRpdGxlKCJDb25zZW5zdXMgTWVyZ2luZyB3aXRoIHByb3BvcnRpb25cbmFuZCBjb21wYXJpc29uIHdpdGggdGhlIGFsbGVuIHN1YmNsYXNzLiIpCgpybShjbHVzdGVycywgY2VsbHNDb25zZW5zdXMsIGNvbnNlbnN1cykKYGBgCgojIyBTdG9wcGluZyBkdXJpbmcgdGhlIG1lcmdpbmcKCmBgYHtyIGNvbnNlbnN1cyB3aXRoIGludGVybWVkaWF0ZX0KbWlkTWF0IDwtIGludGVybWVkaWF0ZU1hdChtZXJnZXIgPSBtZXJnZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAuOSkKciA8LSB3aGljaChjb2xuYW1lcyhtaWRNYXQpID09ICJSc2VjVCIpCmlmIChhbGwuZXF1YWwoaW50ZWdlcigwKSAscikgIT0gVFJVRSkgewogIG1pZE1hdFssIlJzZWMiXSA8LSBhc3NpZ25Sc2VjKG1lcmdlcnMsIHAgPSAuOSkKfQptaWRNYXQgPC0gYXMubWF0cml4KG1pZE1hdCkKCmNlbGxzQ29uc2Vuc3VzIDwtIENvbnNlbnN1cyhjbHVzTWF0ID0gbWlkTWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgPSAodHlwZSAhPSAiU21hcnQtU2VxIikpCmlmICh0eXBlID09ICJSZWdldiIpIHsKICBjb25zZW5zdXMgPC0gY2JpbmQoY2VsbHNDb25zZW5zdXMsCiAgICAgICAgICAgICAgICAgICAgIG1pZE1hdCkKfSBlbHNlIHsKICBjb25zZW5zdXMgPC0gY2JpbmQoY2VsbHNDb25zZW5zdXMsCiAgICAgICAgICAgICAgICAgICAgIGFsbGVuX2NsdXN0ZXJzJHN1YmNsYXNzX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICBtaWRNYXQpCiAgY29sbmFtZXMoY29uc2Vuc3VzKVtjKDEsIDIpXSA8LSBjKCJDb25zZW5zdXMiLCAiQWxsZW5cbnN1YmNsYXNzIikKfQpjb2xuYW1lcyhjb25zZW5zdXMpW2MoMSwgMildIDwtIGMoIkNvbnNlbnN1cyIsICJBbGxlblxuc3ViY2xhc3MiKQpwbG90Q2x1c3RlcnMob2JqZWN0ID0gY29uc2Vuc3VzICU+JSBhcy5tYXRyaXgoKSkKdGl0bGUoIkNvbnNlbnN1cyBNZXJnaW5nIHdoZW4gc3RvcHBpbmcgZWFybHkiKQoKcm0oY2VsbHNDb25zZW5zdXMsIGNvbnNlbnN1cywgbWlkTWF0KQpgYGAKCiMgU2V1cmF0IEFSSSBQYXJhbQoKYGBge3Igc2V1cmF0IHBhcmFtfQpwbG90Lm5ldygpCnBsb3Qud2luZG93KDA6MSwgMDoxKQpyYXN0ZXJJbWFnZShyZWFkUE5HKAogIGhlcmUoIkZpZ3VyZXMiLCB0eXBlLCBwYXN0ZTAocGFyYW1zJGRhdGFzZXQsICJfU2V1cmF0X0FSSS5wbmciKSkpLAogIDAsIDAsIDEsIDEpCmBgYAo=